利用Wscript顯示GUI 選單並執行命令,類似.BAT
https://ithelp.ithome.com.tw/articles/10342688
'Multi button GUI in Wscript,利用wscript顯示視窗功能表,並執行命令,取代command/choice
'Ref:https://stackoverflow.com/questions/21428596/multi-button-gui-vbsscript
'Ref:https://ithelp.ithome.com.tw/articles/10342688
'修改小地方
const FormText = "`t開啟控制台" '功能表標題
const LabelText = "請點選按鈕" '第一行文字
const MenuCols = 4 '功能表欄數
const ButtonHeight = 25 '高度,預設25
const ButtonWidth = 75 '寬度,4個中文字約75
MenuTXT=Array("離開","控制台","網路連線","防火牆","電源選項","病毒設定")
MenuCMD=Array("","control","control Ncpa.cpl","control firewall.cpl","control powercfg.cpl","windowsdefender://threatsettings")
'以下程式不需修改
MenuCount=uBound(MenuTXT) + 1
If MenuCount <> uBound(MenuCMD) + 1 Then MsgBox "功能標題與數量應該相等!" : WScript.Quit 1
Dim fso,objShell
Set fso = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")
'製作暫存ps1
const TemporaryFolder = 2
Dim sTempPath,MenuFile,pos
sTempPath = fso.GetSpecialFolder(TemporaryFolder)
MenuFile = WScript.scriptname
pos=InStrRev(MenuFile,".")
MenuFile=sTempPath+"\"+Left(MenuFile,pos-1)+".ps1"
call MakeTempPS1(MenuFile)
'WScript.Quit 0
'開始顯示選單/點選=>StdOut回傳=>清除CR(CHR13)及LF(CHR10)
Set exec = objShell.Exec("powershell -executionpolicy bypass -noninteractive -window hidden -file "&MenuFile)
exec.StdIn.Close()
str=exec.StdOut.ReadAll()
str=REPLACE(str,vbcr,"")
str=REPLACE(str,vblf,"")
'執行完後刪除暫存檔
'WScript.Echo "["+str+"]"
If (len(str) >0 ) Then objShell.Run str,4
fso.DeleteFile(MenuFile)
Set exec = Nothing
Set fso=Nothing
Set objShell = Nothing
WScript.Quit 0
'製作選單PS1
Sub MakeTempPS1(MenuFile)
'WScript.Echo "["+MenuFile+"]"
Set ps=fso.OpenTextFile(MenuFile,2,True) '2:Create :read 8:append
ps.Write "#"&Now&" Create Tempfile from "&WScript.ScriptFullName&chr(13)
dim FormW,FormH,BTX,BTY '表單大小W*H,按鈕位置XY
FormW=30+(ButtonWidth +5)*MenuCols '25:左邊界 5:按鈕左邊界
FormH=70+(ButtonHeight+5)*(int(MenuCount/MenuCols)+1) '70:上邊界 5:按鈕上邊界
ps.write "Add-Type -AssemblyName System.Windows.Forms" &chr(13)&_
"$Form = New-Object system.Windows.Forms.Form" &chr(13)&_
"$Form.Font = New-Object System.Drawing.Font(""Tahoma"",10,[System.Drawing.FontStyle]::Bold)"&chr(13)&_
"$Form.Text = """&FormText&""""&chr(13)&_
"$Form.Width = "&FormW&chr(13)&_
"$Form.Height = "&FormH+5&chr(13)&_
"$Form.ControlBox = $False"&chr(13)&_
"$Form.StartPosition = ""CenterScreen"""&chr(13)
ps.write chr(13)&_
"$Label = New-Object System.Windows.Forms.Label"&chr(13)&_
"$Label.Text = """&LabelText&""""&chr(13)&_
"$Label.AutoSize = $True"&chr(13)&_
"$Form.Controls.Add($Label)"&chr(13)
'把第0個調到最後一個
Dim item
For i=0 to MenuCount-1 'Array重0起算
item=i+1 : If item = MenuCount Then item=0 '按鈕左上開始點
BTX=5 +(ButtonWidth +5)*(i mod MenuCols) 'X=左邊界+(按鈕寬+按鈕左邊界)*按鈕cols
BTY=25+(ButtonHeight+10)*int(i/MenuCols) 'Y=上邊界+(按鈕高+按鈕上邊界)*按鈕rows
ps.write chr(13)&_
"$Button"&i+1&" = new-object System.Windows.Forms.Button"&chr(13)&_
"$Button"&i+1&".Location = new-object System.Drawing.Size("&BTX&","&BTY&")"&chr(13)&_
"$Button"&i+1&".Size = new-object System.Drawing.Size("&ButtonWidth&","&ButtonHeight&")"&chr(13)&_
"$Button"&i+1&".Text = """ &MenuTXT(item)&""""&chr(13)&_
"$Button"&i+1&".Add_Click({Write-Host """&MenuCMD(item)&""";$Form.Close()})"&chr(13)&_
"$Form.Controls.Add($Button"&i+1&")"&chr(13)
Next
ps.write chr(13)&"$Form.ShowDialog() | Out-Null"&chr(13)&"Exit 0"
ps.Close
Set ps=nothing
End Sub